home *** CD-ROM | disk | FTP | other *** search
/ 3D Games - Real-time Rend…ng & Software Technology / 3D Games - Real-time Rendering & Software Technology.iso / flysdk / plugin / gamelib / ps.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-03-23  |  3.0 KB  |  158 lines

  1. #include "..\..\lib\Fly3D.h"
  2. #include "gamelib.h"
  3.  
  4. void particle_system::draw()
  5. {
  6.     if (part)
  7.     {
  8.         int i;
  9.         for( i=part0;i<part1;i++ )
  10.             part[i].draw();
  11.     }
  12. }
  13.  
  14. int particle_system::step(int dt)
  15. {
  16.     if (directx->mpmode!=FLYMP_SERVER)
  17.     {
  18.     if (part==0)
  19.         {
  20.         part=new color_particle[totpart];
  21.         part0=part1=0;
  22.         }
  23.     else
  24.         {
  25.         int i;
  26.         for( i=part0;i<part1;i++ )
  27.             {
  28.             part[i].step(dt);
  29.             if (part[i].life<0)
  30.                 part0++;
  31.             else if (part[i].life<fadetime)
  32.                     part[i].color.w=(float)part[i].life/fadetime;
  33.             }
  34.         }
  35.  
  36.     float rnd;
  37.     int i,tot;
  38.  
  39.     i=source->life-life;
  40.     if (i>emmtime) i=emmtime;
  41.     tot=totpart*i/emmtime-part1;
  42.     for( i=0;i<tot;i++ )
  43.         {
  44.         rnd=FRAND;
  45.         part[part1].life=source->life-emmtime;
  46.         part[part1].col_flag=col_flag_new;
  47.         part[part1].texture=texture_new;
  48.         part[part1].radius=0.0f;
  49.         part[part1].size=radius_new;
  50.         part[part1].color=color_new+colorvar_new*rnd;
  51.         part[part1].pos=pos;
  52.         if (FP_BITS(ax)==0 && FP_BITS(ay)==0) 
  53.             part[part1].vel=X*FRAND+Y*FRAND+Z*FRAND;
  54.         else part[part1].vel=X*(FRAND*ax)+Y*(FRAND*ay)+Z;
  55.         part[part1].vel.normalize();
  56.         part[part1].vel*=speed_new+speed_var*rnd;
  57.         part[part1].bump=bump_new;
  58.         part[part1].friction=friction_new;
  59.         part[part1].force.vec(0.0f,0.0f,-gravity_new);
  60.         part[part1].color.w=1.0f;
  61.         part[part1].mass=1.0f;
  62.         part1++;
  63.         }
  64.     }
  65.  
  66.     life-=dt;
  67.     return 0;
  68. }
  69.  
  70. int particle_system::get_custom_param_desc(int i,param_desc *pd)
  71. {
  72.     if (pd!=0)
  73.     switch(i)
  74.     {
  75.         case 0:
  76.             pd->type='c';
  77.             pd->data=&color_new;
  78.             strcpy(pd->name,"partcolor");
  79.             break;
  80.         case 1:
  81.             pd->type='c';
  82.             pd->data=&colorvar_new;
  83.             strcpy(pd->name,"partcolorvar");
  84.             break;
  85.         case 2:
  86.             pd->type='f';
  87.             pd->data=&bump_new;
  88.             strcpy(pd->name,"partbump");
  89.             break;
  90.         case 3:
  91.             pd->type='f';
  92.             pd->data=&friction_new;
  93.             strcpy(pd->name,"partfriction");
  94.             break;
  95.         case 4:
  96.             pd->type='f';
  97.             pd->data=&mass_new;
  98.             strcpy(pd->name,"partmass");
  99.             break;
  100.         case 5:
  101.             pd->type='f';
  102.             pd->data=&radius_new;
  103.             strcpy(pd->name,"partradius");
  104.             break;
  105.         case 6:
  106.             pd->type='f';
  107.             pd->data=&speed_new;
  108.             strcpy(pd->name,"partspeed");
  109.             break;
  110.         case 7:
  111.             pd->type='f';
  112.             pd->data=&speed_var;
  113.             strcpy(pd->name,"partspeedvar");
  114.             break;
  115.         case 8:
  116.             pd->type='f';
  117.             pd->data=&gravity_new;
  118.             strcpy(pd->name,"partgravity");
  119.             break;
  120.         case 9:
  121.             pd->type='i';
  122.             pd->data=&col_flag_new;
  123.             strcpy(pd->name,"partcolflag");
  124.             break;
  125.         case 10:
  126.             pd->type='f';
  127.             pd->data=&ax;
  128.             strcpy(pd->name,"ax");
  129.             break;
  130.         case 11:
  131.             pd->type='f';
  132.             pd->data=&ay;
  133.             strcpy(pd->name,"ay");
  134.             break;
  135.         case 12:
  136.             pd->type='p';
  137.             pd->data=&texture_new;
  138.             strcpy(pd->name,"texture");
  139.             break;
  140.         case 13:
  141.             pd->type='i';
  142.             pd->data=&emmtime;
  143.             strcpy(pd->name,"emmtime");
  144.             break;
  145.         case 14:
  146.             pd->type='i';
  147.             pd->data=&totpart;
  148.             strcpy(pd->name,"totpart");
  149.             break;
  150.         case 15:
  151.             pd->type='i';
  152.             pd->data=&fadetime;
  153.             strcpy(pd->name,"fadetime");
  154.             break;
  155.     }
  156.     return 16;
  157. }
  158.